package com.wzt.config;


import com.wzt.service.AiAssistant;
import com.wzt.service.ChatAssistant;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.memory.chat.TokenWindowChatMemory;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.AiServices;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration(proxyBeanMethods = false)
public class ChatLanguageModelConfig
{
    @Bean
    public ChatLanguageModel chatLanguageModel()
    {
        return OpenAiChatModel.builder()
                .apiKey(System.getenv("LANGCHAIN4J_KEY"))
                //.modelName("qwen-turbo-0624")普通文本  更换模型
                .modelName("qwen-long")
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .build();
    }

    //由上面的来满足
    //没用记忆缓存功能
    @Bean
    public ChatAssistant chatAssistant(ChatLanguageModel chatLanguageModel)
    {
        //把你要响应的接口拿AiService包装起来 由上面的chatLanguageModel来实现
        return AiServices.create(ChatAssistant.class, chatLanguageModel);

    }

    //用了记忆缓存功能
    @Bean
    public AiAssistant aiAssistant(ChatLanguageModel chatLanguageModel)
    {
        return AiServices.builder(AiAssistant.class)
                .chatLanguageModel(chatLanguageModel)//设置聊天语言模型
                //设置聊天记忆者 函数式接口 提供聊天的记忆存储机制 接受一个 memoryId 参数，并返回一个 ChatMemory 实例
                //创建了一个 MessageWindowChatMemory 实例，该实例最多可以存储最近的 100 条消息
                //这有助于在对话中保持上下文 使得模型能够参考之前的对话内容进行更连贯的回复
                .chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(100))
                .build();
    }
}
